package com.yudao.demo;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 演示服务类，用于测试Word模板填充功能
 */
@Service
public class DemoService implements CommandLineRunner {

    /**
     * 填充Word模板的示例方法
     * 
     * @param templatePath 模板文件路径
     * @param outputPath 输出文件路径
     * @param dataMap 要填充的数据
     */
    public void fillWordTemplate(String templatePath, String outputPath, Map<String, String> dataMap) {
        try {
            System.out.println("开始填充Word模板...");
            System.out.println("模板路径: " + templatePath);
            System.out.println("输出路径: " + outputPath);
            System.out.println("要填充的数据: " + dataMap);
            
            // 调用工具类填充模板（返回布尔值）
            boolean success = WordTemplateUtil.fillTemplate(templatePath, outputPath, dataMap);
            
            if (success) {
                System.out.println("Word模板填充成功!");
            } else {
                System.err.println("Word模板填充失败!");
            }
        } catch (Exception e) {
            System.err.println("发生意外错误: " + (e.getMessage() != null ? e.getMessage() : "未知错误"));
            e.printStackTrace();
        }
    }
    
    /**
     * 应用启动时执行的方法
     */
    @Override
    public void run(String... args) {
        executeFillTemplate();
    }
    
    /**
     * 执行模板填充的核心方法
     */
    public void executeFillTemplate() {
        // 示例数据 - 起诉书模板填充数据
        Map<String, String> dataMap = new HashMap<>();
        // 根据模板中的占位符更新键名前缀
        dataMap.put("zrrfzajsy_db_jcymc", "北京市海淀区");
        dataMap.put("zrrfzajsy_db_bgr", "张三");
        dataMap.put("zrrfzajsy_db_bgrxwxz", "张三，男，1990年1月1日出生，身份证号码：110108199001010001，汉族，高中文化程度，无业，住北京市海淀区中关村南大街5号");
        dataMap.put("zrrfzajsy_db_yyzz", "第一百六十四条第一款、第二百六十六条");
        dataMap.put("zrrfzajsy_db_zm", "诈骗");
        dataMap.put("zrrfzajsy_db_bgrxm", "张三涉嫌诈骗罪案");
        dataMap.put("zrrfzajsy_db_gzbgrsj", "2024年10月1日");
        dataMap.put("zrrfzajsy_db_gzbhrsj", "2024年10月2日");
        dataMap.put("zrrfzajsy_db_fymc", "北京市海淀区人民");
        dataMap.put("zrrfzajsy_db_jcg", "李四");
        dataMap.put("zrrfzajsy_db_kcgzl", "王五");
        dataMap.put("zrrfzajsy_db_rq", "2024年11月15日");
        dataMap.put("zrrfzajsy_db_yfsccm", "被告人张三于2024年9月1日至9月15日期间，以非法占有为目的，虚构能够帮助被害人赵六办理北京户口的事实，骗取赵六人民币50万元。");
        dataMap.put("zrrfzajsy_db_sszj", "1.被害人赵六的陈述；2.银行转账记录；3.微信聊天记录；4.被告人张三的供述与辩解等证据。");
        
        // 设置正确的模板路径
        String templatePath = "D:\\doc\\temp\\[100000030205]起诉书（自然人犯罪案件适用）.docx";
        
        // 添加时间戳到输出文件名，并包含模板文件的全名
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
        String timestamp = dateFormat.format(new Date());
        // 提取模板文件名（不包含路径）
        String templateFileName = templatePath.substring(templatePath.lastIndexOf('\\') + 1);
        // 生成包含模板文件名的输出路径
        String outputPath = "D:\\doc\\filled_" + templateFileName.replace(".docx", "_") + timestamp + ".docx";
        
        // 执行模板填充
        System.out.println("开始填充Word模板，模板路径: " + templatePath);
        
        try {
            // 调用工具类填充模板（现在返回布尔值而不是抛出异常）
            boolean success = WordTemplateUtil.fillTemplate(templatePath, outputPath, dataMap);
            
            if (success) {
                System.out.println("Word模板填充成功! 输出文件路径: " + outputPath);
            } else {
                System.err.println("Word模板填充失败!");
            }
        } catch (Exception e) {
            System.err.println("执行填充模板操作时发生错误: " + (e.getMessage() != null ? e.getMessage() : "未知错误"));
            e.printStackTrace();
        }
    }
    
    /**
     * 可执行的主函数，用于直接运行此功能
     */
    public static void main(String[] args) {
        System.out.println("开始执行Word模板填充程序...");
        DemoService demoService = new DemoService();
        demoService.executeFillTemplate();
        System.out.println("程序执行完毕!");
    }
}